package zisu.netty.practice.NIO;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

/**
 * @Desc: ""
 * @Author: caixiang
 * @DATE: 2020/6/30 15:45
 */
public class NIOFileChannel03 {
    public static void main(String[] args) throws IOException, InterruptedException {

        FileInputStream fileInputStream = new FileInputStream("d:\\1.txt");
        FileChannel fileChannel01 = fileInputStream.getChannel();


        FileOutputStream fileOutputStream = new FileOutputStream("d:\\2.txt");
        FileChannel fileChannel02 = fileOutputStream.getChannel();

        //因为分配的byteBuffer的空间是1024个字节 所以一下子 就把1.txt全部读到了。
        ByteBuffer byteBuffer = ByteBuffer.allocate(10);

        /*while (true){  //循环读取，
            //每次读 之前 都要清空byteBuffer。。如果不清空 下次再去读的时候，就这个buffer就满了，不能读了，返回的值是0  就一直为0，死循环
            byteBuffer.clear();

            int read = fileChannel01.read(byteBuffer);
            if(read == -1){
                break;
            }
            //上面是读。。下面将要写（现在翻转一下）
            byteBuffer.flip();

            fileChannel02.write(byteBuffer);
        }*/

        while (true){  //循环读取，
            //每次读 之前 都要清空byteBuffer。。如果不清空 下次再去读的时候，就这个buffer就满了，不能读了，返回的值是0  就一直为0，死循环
            byteBuffer.clear();

            //注意fileChannel 都是 每次 接着上次读文件读到的位置 之后接着读的。
            int read = fileChannel01.read(byteBuffer);
            if(read != -1){
                //上面是读。。下面将要写（现在翻转一下）
                byteBuffer.flip();

                fileChannel02.write(byteBuffer);
            }
            Thread.sleep(500);
        }
    }
}
